import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

let lifeData = {};

try{
	// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
	lifeData = uni.getStorageSync('lifeData');
}catch(e){
	
}

// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = ['vuex_user', 'vuex_token'];

// 保存变量到本地存储中
const saveLifeData = function(key, value){
	// 判断变量名是否在需要存储的数组中
	if(saveStateKeys.indexOf(key) != -1) {
		// 获取本地存储的lifeData对象，将变量添加到对象中
		let tmp = uni.getStorageSync('lifeData');
		// 第一次打开APP，不存在lifeData变量，故放一个{}空对象
		tmp = tmp ? tmp : {};
		tmp[key] = value;
		// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
		uni.setStorageSync('lifeData', tmp);
	}
}
const store = new Vuex.Store({
	state: {
		// 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量
		// 加上vuex_前缀，是防止变量名冲突，也让人一目了然
		vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'},
		vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
		// 如果vuex_version无需保存到本地永久存储，无需lifeData.vuex_version方式
		vuex_version: '1.0.1',
		vuex_demo: '绛紫',
		//当前登录者用户id
		vuex_user_id : 0,
		vuex_user_name : '',
		vuex_user_avatar : '',
		vuex_user_sex : '',
		vuex_user_phone : '',
		vuex_user_hide_phone : '',
		vuex_user_type_name : '',
		vuex_my_req_code : '',
		//微信登录信息
		vuex_openid : '',
		vuex_session_key : '',
		
		//分享者id 
		vuex_share_uid:'',
		//邀请者邀请码
		vuex_req_code:'',
		//文件上传
		vuex_upload_info:{},
		//播放对象
		vuex_play_obj:{},
	},
	mutations: {
		$uStore(state, payload) {
			// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
			let nameArr = payload.name.split('.');
			let saveKey = '';
			let len = nameArr.length;
			if(len >= 2) {
				let obj = state[nameArr[0]];
				for(let i = 1; i < len - 1; i ++) {
					obj = obj[nameArr[i]];
				}
				obj[nameArr[len - 1]] = payload.value;
				saveKey = nameArr[0];
			} else {
				// 单层级变量，在state就是一个普通变量的情况
				state[payload.name] = payload.value;
				saveKey = payload.name;
			}
			// 保存变量到本地，见顶部函数定义
			saveLifeData(saveKey, state[saveKey])
		},
		//处理登录
		handleLogin(state,payload){
			//永久 缓存数据
			this.commit('$uStore',{name:'vuex_token',value:payload.token||''})
			//更新状态
			state.vuex_user_id = payload.user_id||0
			state.vuex_user_name = payload.user_name||''
			state.vuex_user_avatar = payload.user_avatar||''
			state.vuex_user_phone = payload.user_phone||''
			state.vuex_user_hide_phone = payload.user_hide_phone||''
			state.vuex_user_sex = payload.user_sex||0
			
			state.vuex_user_type_name = payload.user_type_name||''
			
			state.vuex_openid = payload.openid
			state.vuex_session_key = payload.session_key
			
		},
		//购物车发生变化
		handleCartNum(state,payload){
			let num= payload.num||0
		    console.log("num: "+num);
			if(num){
				console.log('----handleCartNum>set',num)
				// uni.setTabBarBadge({ index: 2, text: num+'' })
			}else{
				console.log('----handleCartNum>remove',num)
				// uni.removeTabBarBadge({ index:2 })
			}
		}
	},
	getters:{
		//是否是系统管理员
		state_is_manager(state){
			return state.vuex_manager_state===1
		},
		get_user_face(state){
			return state.vuex_user_avatar?state.vuex_user_avatar:'/static/images/avatar.png'
		}
	},
	actions:{
		tokenFlushUserInfo({state,commit}){
			console.log('-------tokenFlushUserInfo----222',state.vuex_token)
			if(state.vuex_token){
				Vue.prototype.$u.http.post("/api/user/flush",{user_token:state.vuex_token}).then(({data})=>{
					commit('handleLogin',data)
				})
			}
			
		},
		//微信登录
		handleWechatLogin({state,commit}){
			console.log('----------handleWechatLogin')
			uni.login({
			  provider: 'weixin',
			  success:  (loginRes)=> {
				console.log(loginRes)
				let data = loginRes
				data['provider'] = 'min_wx'
				
				//验证登录信息
				Vue.prototype.$u.http.post('/api/index/wxMinCodeToInfo',data)
				.then(({code,msg,data})=>{
					console.log('-------handleWechatLogin',data)
					// state.vuex_openid = data.openid
					// state.vuex_session_key = data.session_key
					commit('handleLogin',data)
					//成功
					// state.vuex_third_auth_login_data=data||{}
				})
			  }
			});
		},
		handleLogout({state,commit}){
			//提交退出信息
			commit('handleLogin',{})
		}
	}
})

export default store
